package com.mark.service.impl;

import com.mark.entity.school.UClass;
import com.mark.entity.school.UGrade;
import com.mark.mapper.UClassMapper;
import com.mark.mapper.UGradeMapper;
import com.mark.service.UClassService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;

/**
 * (UClass)表服务实现类
 *
 * @author Deng PengFei
 * @since 2021-10-27 11:16:56
 */
@Service
public class UClassServiceImpl implements UClassService {
    @Autowired
    private UClassMapper uClassMapper;  // uClass表的操作
    @Autowired
    private UGradeMapper uGradeMapper; // uGrade表

    /**
     * 通过ID查询单条数据
     *
     * @param claId 主键
     * @return 实例对象
     */
    @Override
    public UClass queryById(Integer claId) {
        return this.uClassMapper.queryById(claId);
    }

    /**
     * 查询多条数据
     *
     * @return 对象列表
     */
    @Override
    public List<UClass> getClassList() {
        return this.uClassMapper.getClassList();
    }

    /**
     * 修改数据
     *
     * @param uClass 实例对象
     * @return 实例对象
     */
    @Override
    public UClass update(UClass uClass) {
        this.uClassMapper.update(uClass);
        return this.queryById(uClass.getClaId());
    }

    /**
     * 通过主键删除数据
     *
     * @param claId 主键
     * @return 是否成功
     */
    @Override
    public boolean deleteByClaId(Integer claId) {
        return this.uClassMapper.deleteByClaId(claId) > 0;
    }

    /**
     * 增加一个新的班级
     *
     * @param newCla 增加的班级对象
     * @return 1001 成功 ，1002 班级已存在 ，1003失败
     */
    @Override
    public Integer addCla(UClass newCla) {
        newCla.setClaNm(newCla.getGraNm() + newCla.getClaNm() + "班");   // 班级名称的全称
        //判断班级是否已经存在
        List<UClass> classList = this.uClassMapper.queryClaByCondition(newCla);
        if (classList.size() > 0) {
            return 1002;
        }
        //班级不存在则添加  通过年级列表查询 学校信息 必填项 学校ID  学校名称
        UGrade grade = this.uGradeMapper.queryByGraId(newCla.getGraId());
        newCla.setSchId(grade.getSchId());
        newCla.setSchNm(grade.getSchNm());
        return this.uClassMapper.insert(newCla) > 0 ? 1001 : 1003;
    }


    /**
     * 批量导入班级信息
     *
     * @param ExclClaList 读取到的excl信息列表
     * @return true 成功 、 false 失败
     */
    @Override
    public Boolean importClaList(ArrayList<ArrayList<String>> ExclClaList) {
        //解析读取到的excl信息  [[标题],[],[],[],[],[],[]]
        ArrayList<String> title = ExclClaList.get(0);   // 获取到标题行
        List<UClass> classList = new ArrayList<>();
        for (int i = 1; i < ExclClaList.size(); i++) {
            ArrayList<String> claInfo = ExclClaList.get(i); // 获取内容行
            UClass uClass = new UClass();
            for (int j = 0; j < claInfo.size(); j++) {
                switch (title.get(j).trim()) {
                    case "年级Id":
                        uClass.setGraId(Integer.parseInt(claInfo.get(j).trim()));
                        break;
                    case "年级名称":
                        uClass.setGraNm(claInfo.get(j).trim());
                        break;
                    case "班级文理类型":
                        uClass.setClaType(Integer.parseInt(claInfo.get(j).trim()));
                        break;
                    case "班级名称":
                        uClass.setClaNm(claInfo.get(j).trim());
                        break;
                    default:
                        break;
                }
            }
            classList.add(uClass);
        }
        for (UClass uClass : classList) {
            this.addCla(uClass);
        }
        return true;
    }
}